package com.atguigu.crowd.util;

/**
 * 统一整个项目中Ajax请求返回的结果（未来也可以用于分布式架构各个模块间调用时返回统一类型）
 * @author L
 *
 * @param <T>
 */
public class ResultEntity<T> {
	
	/**
	 * 成功
	 */
	public static  final String SUCCESS="SUCCESS";
	/**
	 * 失败
	 */
	public static final String FAILED="FAILED";

	/**
	 * 用来封装当前请求处理的结果是成功还是失败
	 */
	private String result;

	/**
	 * 请求处理失败时返回的错误消息
	 */
	private String message;

	/**
	 *  要返回的数据
	 */
	private T data;
	
	/**
	 * 请求处理成功且不需要返回数据时使用的工具方法
	 * @return
	 */
	public static<Type> ResultEntity<Type> successWithoutData(){
		
		return new ResultEntity<Type>(SUCCESS,null,null);
	}
	
	/**
	 * 请求处理成功且 需要返回数据时使用的工具方法
	 * @param data 要返回的数据
	 * @return
	 */
	public static<Type> ResultEntity<Type> successWithData(Type data){
		
		return new ResultEntity<Type>(SUCCESS,null,data);
	}
	
	/**
	 * 请求处理 失败后  使用的工具方法
	 * @param message 要返回的请求处理失败后的 错误消息
	 * @return
	 */
	public static <Type> ResultEntity<Type> failed(String message){
		
		return new ResultEntity<Type>(FAILED, message, null);
	}
	
	//有参构造、无参构造、get/set方法、tostring方法：
	public ResultEntity() {
	}

	public ResultEntity(String result, String message, T data) {
		super();
		this.result = result;
		this.message = message;
		this.data = data;
	}

	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}

	public static String getSuccess() {
		return SUCCESS;
	}

	public static String getFailed() {
		return FAILED;
	}

	@Override
	public String toString() {
		return "ResultEntity [result=" + result + ", message=" + message + ", data=" + data + "]";
	}
	
	
	

}